package org.realogic.cfm.persistence.dialect;

import java.util.List;

import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.realogic.cfm.persistence.KParameter;
import org.realogic.cfm.persistence.query.QueryCondition;

/**
 * 仿照hibernate的Dialect
 * 
 */
public interface Dialect {

	/**
	 * 数据库本身是否支持分页当前的分页查询方式 如果数据库不支持的话，则不进行数据库分页
	 * 
	 * @return true：支持当前的分页查询方式
	 */
	public boolean supportsLimit();

	/**
	 * 将sql转换为分页SQL，分别调用分页sql
	 * 
	 * @param sql
	 *            SQL语句
	 * @param offset
	 *            开始条数
	 * @param limit
	 *            每页显示多少纪录条数
	 * @return 分页查询的sql
	 */
	public String getLimitString(String sql, int offset, int limit);
	
	public String getCountSQL(String sql);
	
	public List<ParameterMapping> newParameterMappings(MappedStatement mappedStatement,BoundSql boundSql,QueryCondition queryCondition,boolean isForPage);

	public List<KParameter> newDivPageParameters(List<KParameter> paramters);
}
